package xml;

import java.rmi.RemoteException;
import java.sql.Date;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;

import remoto.Proxy;
import dominio.Cliente;
import dominio.Cotizacion;
import dominioTO.ClienteTO;
import dominioTO.CotizacionTO;
import dominioTO.ProveedorTO;


public class AltaCotizacionCliente {
	private static final String ARCHIVO = "C:/lib/SolicitudDeCotizacion.xml";
	private static AltaCotizacionCliente instancia;
	private Document doc;
	
	public static AltaCotizacionCliente getInstancia(){
		if(instancia == null){
			instancia = new AltaCotizacionCliente();
			instancia.crearDocumento();
		}
		return instancia;
	}
	
	private void crearDocumento(){
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		DocumentBuilder builder;
		try {
			builder = factory.newDocumentBuilder();
			doc = builder.parse(ARCHIVO);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
		
	public Cotizacion validarCotizacion(){
		Cotizacion cotizacionCliente= new Cotizacion();
		
		
		cotizacionCliente.setFecha(mapFecha((Element)doc));
		cotizacionCliente.setIdCotizacion(mapIdCotizacion((Element)doc));
		
		//Busco la orden
		NodeList nodosCliente = doc.getElementsByTagName("Cliente");
		cotizacionCliente.setCliente(mapCliente((Element)nodosCliente.item(0)));
		
		NodeList nodosRodamientos = doc.getElementsByTagName("Rodamientos");
		NodeList nodosItem = ((Document) nodosRodamientos).getElementsByTagName("Item");
		for(int i = 0; i < nodosItem.getLength(); i++){
			if(nodosItem.item(i).hasChildNodes()){		
				//Guardo los datos de IdCotizacion y Fecha

				
			}
		}
		
		return cotizacionCliente;
	}
	private Date  mapFecha(Element eleCotizacion) {
		String aux = eleCotizacion.getAttribute("fecha");
		return Date.valueOf(aux);
	}
	private Integer  mapIdCotizacion(Element eleCotizacion) {
		String aux = eleCotizacion.getAttribute("numero");
		return Integer.valueOf(aux);
	}
	
	
	private Cliente  mapCliente(Element eleCotizacion) {
		try {
			ClienteTO cliTO = Proxy.getInstancia().buscarCliente(eleCotizacion.getAttribute("cuil"));
			Cliente cli = new Cliente();
			cli.setCuit(cliTO.getCuit());
			cli.setRazonSocial(cliTO.getRazonSocial());
			cli.setFechaAlta(cliTO.getFechaAlta());
			cli.setDescuentos(cliTO.getDescuentos());
			cli.setRespInscripto(cliTO.isRespInscripto());
			cli.setIngBrutos(cliTO.getIngBrutos());
			cli.setCondPago(cliTO.getCondPago());
			cli.setEstado(cliTO.isEstado());
			
			return cli;
		
		} catch (RemoteException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return null;
		}
		
	
	}
	
	private ProveedorTO mapProveedor(Element eleProv){
		ProveedorTO prov = new ProveedorTO();
		
		prov.setCuit(eleProv.getElementsByTagName("cuit").item(0).getTextContent());
		prov.setNombre(eleProv.getElementsByTagName("razonSocial").item(0).getTextContent());
		prov.setDireccion(eleProv.getElementsByTagName("direccion").item(0).getTextContent());
		prov.setTelefono(eleProv.getElementsByTagName("telefono").item(0).getTextContent());
		
		return prov;
	}
	
	/*public void persistirClientes(Set<Cliente> clientes){
		Document doc = nuevoDocumento();
		Element root = doc.createElement("Clientes");
		doc.appendChild(root);
		for(Cliente cliente : clientes){
			Element usu = doc.createElement("Cliente");
			usu.setAttribute("Id", cliente.getId());
			root.appendChild(usu);
			Element usunom = doc.createElement("Usu-nombre");
			usunom.setTextContent(cliente.getNombre());
			usu.appendChild(usunom);
			Element usumail = doc.createElement("Usu-email");
			usumail.setTextContent(cliente.getMail());
			usu.appendChild(usumail);
		}
		aXML(doc);
	}
	
	private Document nuevoDocumento(){
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		DocumentBuilder builder;
		try {
			builder = factory.newDocumentBuilder();
			Document doc = builder.newDocument();
			return doc;
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}*/
	
	/*private void aXML(Document doc){
		try {
			Transformer transformer = TransformerFactory.newInstance().newTransformer();
			Source src = new DOMSource(doc);
			Result dest = new StreamResult(new FileWriter(new File(ARCHIVO)));
			transformer.transform(src, dest);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}*/
}
